import os
import h5py
import pandas
import geopandas
from shapely.geometry import Point
import geoviews
from geoviews import opts, tile_sources as gvts
import shapely
import warnings
from shapely.errors import ShapelyDeprecationWarning
geoviews.extension('bokeh','matplotlib')
warnings.filterwarnings("ignore", category=ShapelyDeprecationWarning) How to work with GEDI Level 2B V002 Data
This tutorial was developed as a walkthrough at the USFS - NASA JOINT APPLICATIONS WORKSHOP part of Applied Earth Observations Innovation Partneship.
This tutorial will show how to use Python to open GEDI L2B Version 2 files, subset layer and to a region of interest, filter by quality, and visualize GEDI Elevation, Canopy Elevation, Plant Area Index,and Canopy Height along with Tandem-X DEM and Non-vegetated area from MODIS.
A small area of eastern part of Uinta-Wasatch-Cache National Forest is used as the ROI for this tutorial.
Note: follow the steps provided in Prerequisites/Setup Instructions section in README.md
1. Set Up the Working Environment and Retrieve Files
Import the required packages and set the input/working directory to run this Jupyter Notebook locally.
Set up the working environment and retrieve GEDI02_B files.
Direct link to download GEDI02_B granule used in this workflow:
- https://e4ftl01.cr.usgs.gov//GEDI_L1_L2/GEDI/GEDI02_B.002/2022.04.30/GEDI02_B_2022120091720_O19145_02_T09106_02_003_01_V002.h5?_ga=2.154728634.387355792.1681738783-1969705792.1681738783
inDir = os.getcwd() # Set input directory to the current working directory
os.chdir(inDir)
gedi_L2B = [g for g in os.listdir() if g.startswith('GEDI02_B') and g.endswith('.h5')] # List all GEDI L2B .h5 files in inDir
gedi_L2B['GEDI02_B_2022120091720_O19145_02_T09106_02_003_01_V002.h5']
The standard format for GEDI Version 2 filenames is as follows:
GEDI02_B: Product Short Name
2022120091720: Julian Date and Time of Acquisition (YYYYDDDHHMMSS)
O19145: Orbit Number
02: Sub-Orbit Granule Number (1-4)
T09106: Track Number (Reference Ground Track)
02: Positioning and Pointing Determination System (PPDS) type (00 is predict, 01 rapid, 02 and higher is final)
003: PGE Version Number
01: Granule Production Version
V002: Product Version
2. Open a GEDI HDF5 File and Read File Metadata
3. Read SDS Metadata and Subset by Beam
The GEDI instrument consists of 3 lasers producing a total of 8 beam ground transects. The eight remaining groups contain data for each of the eight GEDI beam transects. For additional information, be sure to check out: https://gedi.umd.edu/instrument/specifications/.
One useful piece of metadata to retrieve from each beam transect is whether it is a full power beam or a coverage beam. GEDI coverage beams will not penetrate dense forest. The GEDI coverage beams were only designed to penetrate canopies of up to 95% canopy cover under “average” conditions, so users should preference use of GEDI power beams in the case of dense forest.
for beam in list(L2B.keys()):
if beam == 'METADATA':
continue
else:
print(beam, 'is:', L2B[beam].attrs['description'])BEAM0000 is: Coverage beam
BEAM0001 is: Coverage beam
BEAM0010 is: Coverage beam
BEAM0011 is: Coverage beam
BEAM0101 is: Full power beam
BEAM0110 is: Full power beam
BEAM1000 is: Full power beam
BEAM1011 is: Full power beam
Identify all the datasets in the GEDI HDF5 file below.
# list(L2B['BEAM1011'].keys())
L2B_objs = []
L2B.visit(L2B_objs.append) # Retrieve list of datasets
SDS = [o for o in L2B_objs if isinstance(L2B[o], h5py.Dataset)] # Search for relevant SDS inside data file
SDS['BEAM0000/algorithmrun_flag',
'BEAM0000/ancillary/dz',
'BEAM0000/ancillary/l2a_alg_count',
'BEAM0000/ancillary/maxheight_cuttoff',
'BEAM0000/ancillary/rg_eg_constraint_center_buffer',
'BEAM0000/ancillary/rg_eg_mpfit_max_func_evals',
'BEAM0000/ancillary/rg_eg_mpfit_maxiters',
'BEAM0000/ancillary/rg_eg_mpfit_tolerance',
'BEAM0000/ancillary/signal_search_buff',
'BEAM0000/ancillary/tx_noise_stddev_multiplier',
'BEAM0000/beam',
'BEAM0000/channel',
'BEAM0000/cover',
'BEAM0000/cover_z',
'BEAM0000/fhd_normal',
'BEAM0000/geolocation/degrade_flag',
'BEAM0000/geolocation/delta_time',
'BEAM0000/geolocation/digital_elevation_model',
'BEAM0000/geolocation/elev_highestreturn',
'BEAM0000/geolocation/elev_lowestmode',
'BEAM0000/geolocation/elevation_bin0',
'BEAM0000/geolocation/elevation_bin0_error',
'BEAM0000/geolocation/elevation_lastbin',
'BEAM0000/geolocation/elevation_lastbin_error',
'BEAM0000/geolocation/height_bin0',
'BEAM0000/geolocation/height_lastbin',
'BEAM0000/geolocation/lat_highestreturn',
'BEAM0000/geolocation/lat_lowestmode',
'BEAM0000/geolocation/latitude_bin0',
'BEAM0000/geolocation/latitude_bin0_error',
'BEAM0000/geolocation/latitude_lastbin',
'BEAM0000/geolocation/latitude_lastbin_error',
'BEAM0000/geolocation/local_beam_azimuth',
'BEAM0000/geolocation/local_beam_elevation',
'BEAM0000/geolocation/lon_highestreturn',
'BEAM0000/geolocation/lon_lowestmode',
'BEAM0000/geolocation/longitude_bin0',
'BEAM0000/geolocation/longitude_bin0_error',
'BEAM0000/geolocation/longitude_lastbin',
'BEAM0000/geolocation/longitude_lastbin_error',
'BEAM0000/geolocation/shot_number',
'BEAM0000/geolocation/solar_azimuth',
'BEAM0000/geolocation/solar_elevation',
'BEAM0000/l2a_quality_flag',
'BEAM0000/l2b_quality_flag',
'BEAM0000/land_cover_data/landsat_treecover',
'BEAM0000/land_cover_data/landsat_water_persistence',
'BEAM0000/land_cover_data/leaf_off_doy',
'BEAM0000/land_cover_data/leaf_off_flag',
'BEAM0000/land_cover_data/leaf_on_cycle',
'BEAM0000/land_cover_data/leaf_on_doy',
'BEAM0000/land_cover_data/modis_nonvegetated',
'BEAM0000/land_cover_data/modis_nonvegetated_sd',
'BEAM0000/land_cover_data/modis_treecover',
'BEAM0000/land_cover_data/modis_treecover_sd',
'BEAM0000/land_cover_data/pft_class',
'BEAM0000/land_cover_data/region_class',
'BEAM0000/land_cover_data/urban_focal_window_size',
'BEAM0000/land_cover_data/urban_proportion',
'BEAM0000/master_frac',
'BEAM0000/master_int',
'BEAM0000/num_detectedmodes',
'BEAM0000/omega',
'BEAM0000/pai',
'BEAM0000/pai_z',
'BEAM0000/pavd_z',
'BEAM0000/pgap_theta',
'BEAM0000/pgap_theta_error',
'BEAM0000/pgap_theta_z',
'BEAM0000/rg',
'BEAM0000/rh100',
'BEAM0000/rhog',
'BEAM0000/rhog_error',
'BEAM0000/rhov',
'BEAM0000/rhov_error',
'BEAM0000/rossg',
'BEAM0000/rv',
'BEAM0000/rx_processing/algorithmrun_flag_a1',
'BEAM0000/rx_processing/algorithmrun_flag_a2',
'BEAM0000/rx_processing/algorithmrun_flag_a3',
'BEAM0000/rx_processing/algorithmrun_flag_a4',
'BEAM0000/rx_processing/algorithmrun_flag_a5',
'BEAM0000/rx_processing/algorithmrun_flag_a6',
'BEAM0000/rx_processing/pgap_theta_a1',
'BEAM0000/rx_processing/pgap_theta_a2',
'BEAM0000/rx_processing/pgap_theta_a3',
'BEAM0000/rx_processing/pgap_theta_a4',
'BEAM0000/rx_processing/pgap_theta_a5',
'BEAM0000/rx_processing/pgap_theta_a6',
'BEAM0000/rx_processing/pgap_theta_error_a1',
'BEAM0000/rx_processing/pgap_theta_error_a2',
'BEAM0000/rx_processing/pgap_theta_error_a3',
'BEAM0000/rx_processing/pgap_theta_error_a4',
'BEAM0000/rx_processing/pgap_theta_error_a5',
'BEAM0000/rx_processing/pgap_theta_error_a6',
'BEAM0000/rx_processing/rg_a1',
'BEAM0000/rx_processing/rg_a2',
'BEAM0000/rx_processing/rg_a3',
'BEAM0000/rx_processing/rg_a4',
'BEAM0000/rx_processing/rg_a5',
'BEAM0000/rx_processing/rg_a6',
'BEAM0000/rx_processing/rg_eg_amplitude_a1',
'BEAM0000/rx_processing/rg_eg_amplitude_a2',
'BEAM0000/rx_processing/rg_eg_amplitude_a3',
'BEAM0000/rx_processing/rg_eg_amplitude_a4',
'BEAM0000/rx_processing/rg_eg_amplitude_a5',
'BEAM0000/rx_processing/rg_eg_amplitude_a6',
'BEAM0000/rx_processing/rg_eg_amplitude_error_a1',
'BEAM0000/rx_processing/rg_eg_amplitude_error_a2',
'BEAM0000/rx_processing/rg_eg_amplitude_error_a3',
'BEAM0000/rx_processing/rg_eg_amplitude_error_a4',
'BEAM0000/rx_processing/rg_eg_amplitude_error_a5',
'BEAM0000/rx_processing/rg_eg_amplitude_error_a6',
'BEAM0000/rx_processing/rg_eg_center_a1',
'BEAM0000/rx_processing/rg_eg_center_a2',
'BEAM0000/rx_processing/rg_eg_center_a3',
'BEAM0000/rx_processing/rg_eg_center_a4',
'BEAM0000/rx_processing/rg_eg_center_a5',
'BEAM0000/rx_processing/rg_eg_center_a6',
'BEAM0000/rx_processing/rg_eg_center_error_a1',
'BEAM0000/rx_processing/rg_eg_center_error_a2',
'BEAM0000/rx_processing/rg_eg_center_error_a3',
'BEAM0000/rx_processing/rg_eg_center_error_a4',
'BEAM0000/rx_processing/rg_eg_center_error_a5',
'BEAM0000/rx_processing/rg_eg_center_error_a6',
'BEAM0000/rx_processing/rg_eg_chisq_a1',
'BEAM0000/rx_processing/rg_eg_chisq_a2',
'BEAM0000/rx_processing/rg_eg_chisq_a3',
'BEAM0000/rx_processing/rg_eg_chisq_a4',
'BEAM0000/rx_processing/rg_eg_chisq_a5',
'BEAM0000/rx_processing/rg_eg_chisq_a6',
'BEAM0000/rx_processing/rg_eg_flag_a1',
'BEAM0000/rx_processing/rg_eg_flag_a2',
'BEAM0000/rx_processing/rg_eg_flag_a3',
'BEAM0000/rx_processing/rg_eg_flag_a4',
'BEAM0000/rx_processing/rg_eg_flag_a5',
'BEAM0000/rx_processing/rg_eg_flag_a6',
'BEAM0000/rx_processing/rg_eg_gamma_a1',
'BEAM0000/rx_processing/rg_eg_gamma_a2',
'BEAM0000/rx_processing/rg_eg_gamma_a3',
'BEAM0000/rx_processing/rg_eg_gamma_a4',
'BEAM0000/rx_processing/rg_eg_gamma_a5',
'BEAM0000/rx_processing/rg_eg_gamma_a6',
'BEAM0000/rx_processing/rg_eg_gamma_error_a1',
'BEAM0000/rx_processing/rg_eg_gamma_error_a2',
'BEAM0000/rx_processing/rg_eg_gamma_error_a3',
'BEAM0000/rx_processing/rg_eg_gamma_error_a4',
'BEAM0000/rx_processing/rg_eg_gamma_error_a5',
'BEAM0000/rx_processing/rg_eg_gamma_error_a6',
'BEAM0000/rx_processing/rg_eg_niter_a1',
'BEAM0000/rx_processing/rg_eg_niter_a2',
'BEAM0000/rx_processing/rg_eg_niter_a3',
'BEAM0000/rx_processing/rg_eg_niter_a4',
'BEAM0000/rx_processing/rg_eg_niter_a5',
'BEAM0000/rx_processing/rg_eg_niter_a6',
'BEAM0000/rx_processing/rg_eg_sigma_a1',
'BEAM0000/rx_processing/rg_eg_sigma_a2',
'BEAM0000/rx_processing/rg_eg_sigma_a3',
'BEAM0000/rx_processing/rg_eg_sigma_a4',
'BEAM0000/rx_processing/rg_eg_sigma_a5',
'BEAM0000/rx_processing/rg_eg_sigma_a6',
'BEAM0000/rx_processing/rg_eg_sigma_error_a1',
'BEAM0000/rx_processing/rg_eg_sigma_error_a2',
'BEAM0000/rx_processing/rg_eg_sigma_error_a3',
'BEAM0000/rx_processing/rg_eg_sigma_error_a4',
'BEAM0000/rx_processing/rg_eg_sigma_error_a5',
'BEAM0000/rx_processing/rg_eg_sigma_error_a6',
'BEAM0000/rx_processing/rg_error_a1',
'BEAM0000/rx_processing/rg_error_a2',
'BEAM0000/rx_processing/rg_error_a3',
'BEAM0000/rx_processing/rg_error_a4',
'BEAM0000/rx_processing/rg_error_a5',
'BEAM0000/rx_processing/rg_error_a6',
'BEAM0000/rx_processing/rv_a1',
'BEAM0000/rx_processing/rv_a2',
'BEAM0000/rx_processing/rv_a3',
'BEAM0000/rx_processing/rv_a4',
'BEAM0000/rx_processing/rv_a5',
'BEAM0000/rx_processing/rv_a6',
'BEAM0000/rx_processing/rx_energy_a1',
'BEAM0000/rx_processing/rx_energy_a2',
'BEAM0000/rx_processing/rx_energy_a3',
'BEAM0000/rx_processing/rx_energy_a4',
'BEAM0000/rx_processing/rx_energy_a5',
'BEAM0000/rx_processing/rx_energy_a6',
'BEAM0000/rx_processing/shot_number',
'BEAM0000/rx_range_highestreturn',
'BEAM0000/rx_sample_count',
'BEAM0000/rx_sample_start_index',
'BEAM0000/selected_l2a_algorithm',
'BEAM0000/selected_mode',
'BEAM0000/selected_mode_flag',
'BEAM0000/selected_rg_algorithm',
'BEAM0000/sensitivity',
'BEAM0000/shot_number',
'BEAM0000/stale_return_flag',
'BEAM0000/surface_flag',
'BEAM0001/algorithmrun_flag',
'BEAM0001/ancillary/dz',
'BEAM0001/ancillary/l2a_alg_count',
'BEAM0001/ancillary/maxheight_cuttoff',
'BEAM0001/ancillary/rg_eg_constraint_center_buffer',
'BEAM0001/ancillary/rg_eg_mpfit_max_func_evals',
'BEAM0001/ancillary/rg_eg_mpfit_maxiters',
'BEAM0001/ancillary/rg_eg_mpfit_tolerance',
'BEAM0001/ancillary/signal_search_buff',
'BEAM0001/ancillary/tx_noise_stddev_multiplier',
'BEAM0001/beam',
'BEAM0001/channel',
'BEAM0001/cover',
'BEAM0001/cover_z',
'BEAM0001/fhd_normal',
'BEAM0001/geolocation/degrade_flag',
'BEAM0001/geolocation/delta_time',
'BEAM0001/geolocation/digital_elevation_model',
'BEAM0001/geolocation/elev_highestreturn',
'BEAM0001/geolocation/elev_lowestmode',
'BEAM0001/geolocation/elevation_bin0',
'BEAM0001/geolocation/elevation_bin0_error',
'BEAM0001/geolocation/elevation_lastbin',
'BEAM0001/geolocation/elevation_lastbin_error',
'BEAM0001/geolocation/height_bin0',
'BEAM0001/geolocation/height_lastbin',
'BEAM0001/geolocation/lat_highestreturn',
'BEAM0001/geolocation/lat_lowestmode',
'BEAM0001/geolocation/latitude_bin0',
'BEAM0001/geolocation/latitude_bin0_error',
'BEAM0001/geolocation/latitude_lastbin',
'BEAM0001/geolocation/latitude_lastbin_error',
'BEAM0001/geolocation/local_beam_azimuth',
'BEAM0001/geolocation/local_beam_elevation',
'BEAM0001/geolocation/lon_highestreturn',
'BEAM0001/geolocation/lon_lowestmode',
'BEAM0001/geolocation/longitude_bin0',
'BEAM0001/geolocation/longitude_bin0_error',
'BEAM0001/geolocation/longitude_lastbin',
'BEAM0001/geolocation/longitude_lastbin_error',
'BEAM0001/geolocation/shot_number',
'BEAM0001/geolocation/solar_azimuth',
'BEAM0001/geolocation/solar_elevation',
'BEAM0001/l2a_quality_flag',
'BEAM0001/l2b_quality_flag',
'BEAM0001/land_cover_data/landsat_treecover',
'BEAM0001/land_cover_data/landsat_water_persistence',
'BEAM0001/land_cover_data/leaf_off_doy',
'BEAM0001/land_cover_data/leaf_off_flag',
'BEAM0001/land_cover_data/leaf_on_cycle',
'BEAM0001/land_cover_data/leaf_on_doy',
'BEAM0001/land_cover_data/modis_nonvegetated',
'BEAM0001/land_cover_data/modis_nonvegetated_sd',
'BEAM0001/land_cover_data/modis_treecover',
'BEAM0001/land_cover_data/modis_treecover_sd',
'BEAM0001/land_cover_data/pft_class',
'BEAM0001/land_cover_data/region_class',
'BEAM0001/land_cover_data/urban_focal_window_size',
'BEAM0001/land_cover_data/urban_proportion',
'BEAM0001/master_frac',
'BEAM0001/master_int',
'BEAM0001/num_detectedmodes',
'BEAM0001/omega',
'BEAM0001/pai',
'BEAM0001/pai_z',
'BEAM0001/pavd_z',
'BEAM0001/pgap_theta',
'BEAM0001/pgap_theta_error',
'BEAM0001/pgap_theta_z',
'BEAM0001/rg',
'BEAM0001/rh100',
'BEAM0001/rhog',
'BEAM0001/rhog_error',
'BEAM0001/rhov',
'BEAM0001/rhov_error',
'BEAM0001/rossg',
'BEAM0001/rv',
'BEAM0001/rx_processing/algorithmrun_flag_a1',
'BEAM0001/rx_processing/algorithmrun_flag_a2',
'BEAM0001/rx_processing/algorithmrun_flag_a3',
'BEAM0001/rx_processing/algorithmrun_flag_a4',
'BEAM0001/rx_processing/algorithmrun_flag_a5',
'BEAM0001/rx_processing/algorithmrun_flag_a6',
'BEAM0001/rx_processing/pgap_theta_a1',
'BEAM0001/rx_processing/pgap_theta_a2',
'BEAM0001/rx_processing/pgap_theta_a3',
'BEAM0001/rx_processing/pgap_theta_a4',
'BEAM0001/rx_processing/pgap_theta_a5',
'BEAM0001/rx_processing/pgap_theta_a6',
'BEAM0001/rx_processing/pgap_theta_error_a1',
'BEAM0001/rx_processing/pgap_theta_error_a2',
'BEAM0001/rx_processing/pgap_theta_error_a3',
'BEAM0001/rx_processing/pgap_theta_error_a4',
'BEAM0001/rx_processing/pgap_theta_error_a5',
'BEAM0001/rx_processing/pgap_theta_error_a6',
'BEAM0001/rx_processing/rg_a1',
'BEAM0001/rx_processing/rg_a2',
'BEAM0001/rx_processing/rg_a3',
'BEAM0001/rx_processing/rg_a4',
'BEAM0001/rx_processing/rg_a5',
'BEAM0001/rx_processing/rg_a6',
'BEAM0001/rx_processing/rg_eg_amplitude_a1',
'BEAM0001/rx_processing/rg_eg_amplitude_a2',
'BEAM0001/rx_processing/rg_eg_amplitude_a3',
'BEAM0001/rx_processing/rg_eg_amplitude_a4',
'BEAM0001/rx_processing/rg_eg_amplitude_a5',
'BEAM0001/rx_processing/rg_eg_amplitude_a6',
'BEAM0001/rx_processing/rg_eg_amplitude_error_a1',
'BEAM0001/rx_processing/rg_eg_amplitude_error_a2',
'BEAM0001/rx_processing/rg_eg_amplitude_error_a3',
'BEAM0001/rx_processing/rg_eg_amplitude_error_a4',
'BEAM0001/rx_processing/rg_eg_amplitude_error_a5',
'BEAM0001/rx_processing/rg_eg_amplitude_error_a6',
'BEAM0001/rx_processing/rg_eg_center_a1',
'BEAM0001/rx_processing/rg_eg_center_a2',
'BEAM0001/rx_processing/rg_eg_center_a3',
'BEAM0001/rx_processing/rg_eg_center_a4',
'BEAM0001/rx_processing/rg_eg_center_a5',
'BEAM0001/rx_processing/rg_eg_center_a6',
'BEAM0001/rx_processing/rg_eg_center_error_a1',
'BEAM0001/rx_processing/rg_eg_center_error_a2',
'BEAM0001/rx_processing/rg_eg_center_error_a3',
'BEAM0001/rx_processing/rg_eg_center_error_a4',
'BEAM0001/rx_processing/rg_eg_center_error_a5',
'BEAM0001/rx_processing/rg_eg_center_error_a6',
'BEAM0001/rx_processing/rg_eg_chisq_a1',
'BEAM0001/rx_processing/rg_eg_chisq_a2',
'BEAM0001/rx_processing/rg_eg_chisq_a3',
'BEAM0001/rx_processing/rg_eg_chisq_a4',
'BEAM0001/rx_processing/rg_eg_chisq_a5',
'BEAM0001/rx_processing/rg_eg_chisq_a6',
'BEAM0001/rx_processing/rg_eg_flag_a1',
'BEAM0001/rx_processing/rg_eg_flag_a2',
'BEAM0001/rx_processing/rg_eg_flag_a3',
'BEAM0001/rx_processing/rg_eg_flag_a4',
'BEAM0001/rx_processing/rg_eg_flag_a5',
'BEAM0001/rx_processing/rg_eg_flag_a6',
'BEAM0001/rx_processing/rg_eg_gamma_a1',
'BEAM0001/rx_processing/rg_eg_gamma_a2',
'BEAM0001/rx_processing/rg_eg_gamma_a3',
'BEAM0001/rx_processing/rg_eg_gamma_a4',
'BEAM0001/rx_processing/rg_eg_gamma_a5',
'BEAM0001/rx_processing/rg_eg_gamma_a6',
'BEAM0001/rx_processing/rg_eg_gamma_error_a1',
'BEAM0001/rx_processing/rg_eg_gamma_error_a2',
'BEAM0001/rx_processing/rg_eg_gamma_error_a3',
'BEAM0001/rx_processing/rg_eg_gamma_error_a4',
'BEAM0001/rx_processing/rg_eg_gamma_error_a5',
'BEAM0001/rx_processing/rg_eg_gamma_error_a6',
'BEAM0001/rx_processing/rg_eg_niter_a1',
'BEAM0001/rx_processing/rg_eg_niter_a2',
'BEAM0001/rx_processing/rg_eg_niter_a3',
'BEAM0001/rx_processing/rg_eg_niter_a4',
'BEAM0001/rx_processing/rg_eg_niter_a5',
'BEAM0001/rx_processing/rg_eg_niter_a6',
'BEAM0001/rx_processing/rg_eg_sigma_a1',
'BEAM0001/rx_processing/rg_eg_sigma_a2',
'BEAM0001/rx_processing/rg_eg_sigma_a3',
'BEAM0001/rx_processing/rg_eg_sigma_a4',
'BEAM0001/rx_processing/rg_eg_sigma_a5',
'BEAM0001/rx_processing/rg_eg_sigma_a6',
'BEAM0001/rx_processing/rg_eg_sigma_error_a1',
'BEAM0001/rx_processing/rg_eg_sigma_error_a2',
'BEAM0001/rx_processing/rg_eg_sigma_error_a3',
'BEAM0001/rx_processing/rg_eg_sigma_error_a4',
'BEAM0001/rx_processing/rg_eg_sigma_error_a5',
'BEAM0001/rx_processing/rg_eg_sigma_error_a6',
'BEAM0001/rx_processing/rg_error_a1',
'BEAM0001/rx_processing/rg_error_a2',
'BEAM0001/rx_processing/rg_error_a3',
'BEAM0001/rx_processing/rg_error_a4',
'BEAM0001/rx_processing/rg_error_a5',
'BEAM0001/rx_processing/rg_error_a6',
'BEAM0001/rx_processing/rv_a1',
'BEAM0001/rx_processing/rv_a2',
'BEAM0001/rx_processing/rv_a3',
'BEAM0001/rx_processing/rv_a4',
'BEAM0001/rx_processing/rv_a5',
'BEAM0001/rx_processing/rv_a6',
'BEAM0001/rx_processing/rx_energy_a1',
'BEAM0001/rx_processing/rx_energy_a2',
'BEAM0001/rx_processing/rx_energy_a3',
'BEAM0001/rx_processing/rx_energy_a4',
'BEAM0001/rx_processing/rx_energy_a5',
'BEAM0001/rx_processing/rx_energy_a6',
'BEAM0001/rx_processing/shot_number',
'BEAM0001/rx_range_highestreturn',
'BEAM0001/rx_sample_count',
'BEAM0001/rx_sample_start_index',
'BEAM0001/selected_l2a_algorithm',
'BEAM0001/selected_mode',
'BEAM0001/selected_mode_flag',
'BEAM0001/selected_rg_algorithm',
'BEAM0001/sensitivity',
'BEAM0001/shot_number',
'BEAM0001/stale_return_flag',
'BEAM0001/surface_flag',
'BEAM0010/algorithmrun_flag',
'BEAM0010/ancillary/dz',
'BEAM0010/ancillary/l2a_alg_count',
'BEAM0010/ancillary/maxheight_cuttoff',
'BEAM0010/ancillary/rg_eg_constraint_center_buffer',
'BEAM0010/ancillary/rg_eg_mpfit_max_func_evals',
'BEAM0010/ancillary/rg_eg_mpfit_maxiters',
'BEAM0010/ancillary/rg_eg_mpfit_tolerance',
'BEAM0010/ancillary/signal_search_buff',
'BEAM0010/ancillary/tx_noise_stddev_multiplier',
'BEAM0010/beam',
'BEAM0010/channel',
'BEAM0010/cover',
'BEAM0010/cover_z',
'BEAM0010/fhd_normal',
'BEAM0010/geolocation/degrade_flag',
'BEAM0010/geolocation/delta_time',
'BEAM0010/geolocation/digital_elevation_model',
'BEAM0010/geolocation/elev_highestreturn',
'BEAM0010/geolocation/elev_lowestmode',
'BEAM0010/geolocation/elevation_bin0',
'BEAM0010/geolocation/elevation_bin0_error',
'BEAM0010/geolocation/elevation_lastbin',
'BEAM0010/geolocation/elevation_lastbin_error',
'BEAM0010/geolocation/height_bin0',
'BEAM0010/geolocation/height_lastbin',
'BEAM0010/geolocation/lat_highestreturn',
'BEAM0010/geolocation/lat_lowestmode',
'BEAM0010/geolocation/latitude_bin0',
'BEAM0010/geolocation/latitude_bin0_error',
'BEAM0010/geolocation/latitude_lastbin',
'BEAM0010/geolocation/latitude_lastbin_error',
'BEAM0010/geolocation/local_beam_azimuth',
'BEAM0010/geolocation/local_beam_elevation',
'BEAM0010/geolocation/lon_highestreturn',
'BEAM0010/geolocation/lon_lowestmode',
'BEAM0010/geolocation/longitude_bin0',
'BEAM0010/geolocation/longitude_bin0_error',
'BEAM0010/geolocation/longitude_lastbin',
'BEAM0010/geolocation/longitude_lastbin_error',
'BEAM0010/geolocation/shot_number',
'BEAM0010/geolocation/solar_azimuth',
'BEAM0010/geolocation/solar_elevation',
'BEAM0010/l2a_quality_flag',
'BEAM0010/l2b_quality_flag',
'BEAM0010/land_cover_data/landsat_treecover',
'BEAM0010/land_cover_data/landsat_water_persistence',
'BEAM0010/land_cover_data/leaf_off_doy',
'BEAM0010/land_cover_data/leaf_off_flag',
'BEAM0010/land_cover_data/leaf_on_cycle',
'BEAM0010/land_cover_data/leaf_on_doy',
'BEAM0010/land_cover_data/modis_nonvegetated',
'BEAM0010/land_cover_data/modis_nonvegetated_sd',
'BEAM0010/land_cover_data/modis_treecover',
'BEAM0010/land_cover_data/modis_treecover_sd',
'BEAM0010/land_cover_data/pft_class',
'BEAM0010/land_cover_data/region_class',
'BEAM0010/land_cover_data/urban_focal_window_size',
'BEAM0010/land_cover_data/urban_proportion',
'BEAM0010/master_frac',
'BEAM0010/master_int',
'BEAM0010/num_detectedmodes',
'BEAM0010/omega',
'BEAM0010/pai',
'BEAM0010/pai_z',
'BEAM0010/pavd_z',
'BEAM0010/pgap_theta',
'BEAM0010/pgap_theta_error',
'BEAM0010/pgap_theta_z',
'BEAM0010/rg',
'BEAM0010/rh100',
'BEAM0010/rhog',
'BEAM0010/rhog_error',
'BEAM0010/rhov',
'BEAM0010/rhov_error',
'BEAM0010/rossg',
'BEAM0010/rv',
'BEAM0010/rx_processing/algorithmrun_flag_a1',
'BEAM0010/rx_processing/algorithmrun_flag_a2',
'BEAM0010/rx_processing/algorithmrun_flag_a3',
'BEAM0010/rx_processing/algorithmrun_flag_a4',
'BEAM0010/rx_processing/algorithmrun_flag_a5',
'BEAM0010/rx_processing/algorithmrun_flag_a6',
'BEAM0010/rx_processing/pgap_theta_a1',
'BEAM0010/rx_processing/pgap_theta_a2',
'BEAM0010/rx_processing/pgap_theta_a3',
'BEAM0010/rx_processing/pgap_theta_a4',
'BEAM0010/rx_processing/pgap_theta_a5',
'BEAM0010/rx_processing/pgap_theta_a6',
'BEAM0010/rx_processing/pgap_theta_error_a1',
'BEAM0010/rx_processing/pgap_theta_error_a2',
'BEAM0010/rx_processing/pgap_theta_error_a3',
'BEAM0010/rx_processing/pgap_theta_error_a4',
'BEAM0010/rx_processing/pgap_theta_error_a5',
'BEAM0010/rx_processing/pgap_theta_error_a6',
'BEAM0010/rx_processing/rg_a1',
'BEAM0010/rx_processing/rg_a2',
'BEAM0010/rx_processing/rg_a3',
'BEAM0010/rx_processing/rg_a4',
'BEAM0010/rx_processing/rg_a5',
'BEAM0010/rx_processing/rg_a6',
'BEAM0010/rx_processing/rg_eg_amplitude_a1',
'BEAM0010/rx_processing/rg_eg_amplitude_a2',
'BEAM0010/rx_processing/rg_eg_amplitude_a3',
'BEAM0010/rx_processing/rg_eg_amplitude_a4',
'BEAM0010/rx_processing/rg_eg_amplitude_a5',
'BEAM0010/rx_processing/rg_eg_amplitude_a6',
'BEAM0010/rx_processing/rg_eg_amplitude_error_a1',
'BEAM0010/rx_processing/rg_eg_amplitude_error_a2',
'BEAM0010/rx_processing/rg_eg_amplitude_error_a3',
'BEAM0010/rx_processing/rg_eg_amplitude_error_a4',
'BEAM0010/rx_processing/rg_eg_amplitude_error_a5',
'BEAM0010/rx_processing/rg_eg_amplitude_error_a6',
'BEAM0010/rx_processing/rg_eg_center_a1',
'BEAM0010/rx_processing/rg_eg_center_a2',
'BEAM0010/rx_processing/rg_eg_center_a3',
'BEAM0010/rx_processing/rg_eg_center_a4',
'BEAM0010/rx_processing/rg_eg_center_a5',
'BEAM0010/rx_processing/rg_eg_center_a6',
'BEAM0010/rx_processing/rg_eg_center_error_a1',
'BEAM0010/rx_processing/rg_eg_center_error_a2',
'BEAM0010/rx_processing/rg_eg_center_error_a3',
'BEAM0010/rx_processing/rg_eg_center_error_a4',
'BEAM0010/rx_processing/rg_eg_center_error_a5',
'BEAM0010/rx_processing/rg_eg_center_error_a6',
'BEAM0010/rx_processing/rg_eg_chisq_a1',
'BEAM0010/rx_processing/rg_eg_chisq_a2',
'BEAM0010/rx_processing/rg_eg_chisq_a3',
'BEAM0010/rx_processing/rg_eg_chisq_a4',
'BEAM0010/rx_processing/rg_eg_chisq_a5',
'BEAM0010/rx_processing/rg_eg_chisq_a6',
'BEAM0010/rx_processing/rg_eg_flag_a1',
'BEAM0010/rx_processing/rg_eg_flag_a2',
'BEAM0010/rx_processing/rg_eg_flag_a3',
'BEAM0010/rx_processing/rg_eg_flag_a4',
'BEAM0010/rx_processing/rg_eg_flag_a5',
'BEAM0010/rx_processing/rg_eg_flag_a6',
'BEAM0010/rx_processing/rg_eg_gamma_a1',
'BEAM0010/rx_processing/rg_eg_gamma_a2',
'BEAM0010/rx_processing/rg_eg_gamma_a3',
'BEAM0010/rx_processing/rg_eg_gamma_a4',
'BEAM0010/rx_processing/rg_eg_gamma_a5',
'BEAM0010/rx_processing/rg_eg_gamma_a6',
'BEAM0010/rx_processing/rg_eg_gamma_error_a1',
'BEAM0010/rx_processing/rg_eg_gamma_error_a2',
'BEAM0010/rx_processing/rg_eg_gamma_error_a3',
'BEAM0010/rx_processing/rg_eg_gamma_error_a4',
'BEAM0010/rx_processing/rg_eg_gamma_error_a5',
'BEAM0010/rx_processing/rg_eg_gamma_error_a6',
'BEAM0010/rx_processing/rg_eg_niter_a1',
'BEAM0010/rx_processing/rg_eg_niter_a2',
'BEAM0010/rx_processing/rg_eg_niter_a3',
'BEAM0010/rx_processing/rg_eg_niter_a4',
'BEAM0010/rx_processing/rg_eg_niter_a5',
'BEAM0010/rx_processing/rg_eg_niter_a6',
'BEAM0010/rx_processing/rg_eg_sigma_a1',
'BEAM0010/rx_processing/rg_eg_sigma_a2',
'BEAM0010/rx_processing/rg_eg_sigma_a3',
'BEAM0010/rx_processing/rg_eg_sigma_a4',
'BEAM0010/rx_processing/rg_eg_sigma_a5',
'BEAM0010/rx_processing/rg_eg_sigma_a6',
'BEAM0010/rx_processing/rg_eg_sigma_error_a1',
'BEAM0010/rx_processing/rg_eg_sigma_error_a2',
'BEAM0010/rx_processing/rg_eg_sigma_error_a3',
'BEAM0010/rx_processing/rg_eg_sigma_error_a4',
'BEAM0010/rx_processing/rg_eg_sigma_error_a5',
'BEAM0010/rx_processing/rg_eg_sigma_error_a6',
'BEAM0010/rx_processing/rg_error_a1',
'BEAM0010/rx_processing/rg_error_a2',
'BEAM0010/rx_processing/rg_error_a3',
'BEAM0010/rx_processing/rg_error_a4',
'BEAM0010/rx_processing/rg_error_a5',
'BEAM0010/rx_processing/rg_error_a6',
'BEAM0010/rx_processing/rv_a1',
'BEAM0010/rx_processing/rv_a2',
'BEAM0010/rx_processing/rv_a3',
'BEAM0010/rx_processing/rv_a4',
'BEAM0010/rx_processing/rv_a5',
'BEAM0010/rx_processing/rv_a6',
'BEAM0010/rx_processing/rx_energy_a1',
'BEAM0010/rx_processing/rx_energy_a2',
'BEAM0010/rx_processing/rx_energy_a3',
'BEAM0010/rx_processing/rx_energy_a4',
'BEAM0010/rx_processing/rx_energy_a5',
'BEAM0010/rx_processing/rx_energy_a6',
'BEAM0010/rx_processing/shot_number',
'BEAM0010/rx_range_highestreturn',
'BEAM0010/rx_sample_count',
'BEAM0010/rx_sample_start_index',
'BEAM0010/selected_l2a_algorithm',
'BEAM0010/selected_mode',
'BEAM0010/selected_mode_flag',
'BEAM0010/selected_rg_algorithm',
'BEAM0010/sensitivity',
'BEAM0010/shot_number',
'BEAM0010/stale_return_flag',
'BEAM0010/surface_flag',
'BEAM0011/algorithmrun_flag',
'BEAM0011/ancillary/dz',
'BEAM0011/ancillary/l2a_alg_count',
'BEAM0011/ancillary/maxheight_cuttoff',
'BEAM0011/ancillary/rg_eg_constraint_center_buffer',
'BEAM0011/ancillary/rg_eg_mpfit_max_func_evals',
'BEAM0011/ancillary/rg_eg_mpfit_maxiters',
'BEAM0011/ancillary/rg_eg_mpfit_tolerance',
'BEAM0011/ancillary/signal_search_buff',
'BEAM0011/ancillary/tx_noise_stddev_multiplier',
'BEAM0011/beam',
'BEAM0011/channel',
'BEAM0011/cover',
'BEAM0011/cover_z',
'BEAM0011/fhd_normal',
'BEAM0011/geolocation/degrade_flag',
'BEAM0011/geolocation/delta_time',
'BEAM0011/geolocation/digital_elevation_model',
'BEAM0011/geolocation/elev_highestreturn',
'BEAM0011/geolocation/elev_lowestmode',
'BEAM0011/geolocation/elevation_bin0',
'BEAM0011/geolocation/elevation_bin0_error',
'BEAM0011/geolocation/elevation_lastbin',
'BEAM0011/geolocation/elevation_lastbin_error',
'BEAM0011/geolocation/height_bin0',
'BEAM0011/geolocation/height_lastbin',
'BEAM0011/geolocation/lat_highestreturn',
'BEAM0011/geolocation/lat_lowestmode',
'BEAM0011/geolocation/latitude_bin0',
'BEAM0011/geolocation/latitude_bin0_error',
'BEAM0011/geolocation/latitude_lastbin',
'BEAM0011/geolocation/latitude_lastbin_error',
'BEAM0011/geolocation/local_beam_azimuth',
'BEAM0011/geolocation/local_beam_elevation',
'BEAM0011/geolocation/lon_highestreturn',
'BEAM0011/geolocation/lon_lowestmode',
'BEAM0011/geolocation/longitude_bin0',
'BEAM0011/geolocation/longitude_bin0_error',
'BEAM0011/geolocation/longitude_lastbin',
'BEAM0011/geolocation/longitude_lastbin_error',
'BEAM0011/geolocation/shot_number',
'BEAM0011/geolocation/solar_azimuth',
'BEAM0011/geolocation/solar_elevation',
'BEAM0011/l2a_quality_flag',
'BEAM0011/l2b_quality_flag',
'BEAM0011/land_cover_data/landsat_treecover',
'BEAM0011/land_cover_data/landsat_water_persistence',
'BEAM0011/land_cover_data/leaf_off_doy',
'BEAM0011/land_cover_data/leaf_off_flag',
'BEAM0011/land_cover_data/leaf_on_cycle',
'BEAM0011/land_cover_data/leaf_on_doy',
'BEAM0011/land_cover_data/modis_nonvegetated',
'BEAM0011/land_cover_data/modis_nonvegetated_sd',
'BEAM0011/land_cover_data/modis_treecover',
'BEAM0011/land_cover_data/modis_treecover_sd',
'BEAM0011/land_cover_data/pft_class',
'BEAM0011/land_cover_data/region_class',
'BEAM0011/land_cover_data/urban_focal_window_size',
'BEAM0011/land_cover_data/urban_proportion',
'BEAM0011/master_frac',
'BEAM0011/master_int',
'BEAM0011/num_detectedmodes',
'BEAM0011/omega',
'BEAM0011/pai',
'BEAM0011/pai_z',
'BEAM0011/pavd_z',
'BEAM0011/pgap_theta',
'BEAM0011/pgap_theta_error',
'BEAM0011/pgap_theta_z',
'BEAM0011/rg',
'BEAM0011/rh100',
'BEAM0011/rhog',
'BEAM0011/rhog_error',
'BEAM0011/rhov',
'BEAM0011/rhov_error',
'BEAM0011/rossg',
'BEAM0011/rv',
'BEAM0011/rx_processing/algorithmrun_flag_a1',
'BEAM0011/rx_processing/algorithmrun_flag_a2',
'BEAM0011/rx_processing/algorithmrun_flag_a3',
'BEAM0011/rx_processing/algorithmrun_flag_a4',
'BEAM0011/rx_processing/algorithmrun_flag_a5',
'BEAM0011/rx_processing/algorithmrun_flag_a6',
'BEAM0011/rx_processing/pgap_theta_a1',
'BEAM0011/rx_processing/pgap_theta_a2',
'BEAM0011/rx_processing/pgap_theta_a3',
'BEAM0011/rx_processing/pgap_theta_a4',
'BEAM0011/rx_processing/pgap_theta_a5',
'BEAM0011/rx_processing/pgap_theta_a6',
'BEAM0011/rx_processing/pgap_theta_error_a1',
'BEAM0011/rx_processing/pgap_theta_error_a2',
'BEAM0011/rx_processing/pgap_theta_error_a3',
'BEAM0011/rx_processing/pgap_theta_error_a4',
'BEAM0011/rx_processing/pgap_theta_error_a5',
'BEAM0011/rx_processing/pgap_theta_error_a6',
'BEAM0011/rx_processing/rg_a1',
'BEAM0011/rx_processing/rg_a2',
'BEAM0011/rx_processing/rg_a3',
'BEAM0011/rx_processing/rg_a4',
'BEAM0011/rx_processing/rg_a5',
'BEAM0011/rx_processing/rg_a6',
'BEAM0011/rx_processing/rg_eg_amplitude_a1',
'BEAM0011/rx_processing/rg_eg_amplitude_a2',
'BEAM0011/rx_processing/rg_eg_amplitude_a3',
'BEAM0011/rx_processing/rg_eg_amplitude_a4',
'BEAM0011/rx_processing/rg_eg_amplitude_a5',
'BEAM0011/rx_processing/rg_eg_amplitude_a6',
'BEAM0011/rx_processing/rg_eg_amplitude_error_a1',
'BEAM0011/rx_processing/rg_eg_amplitude_error_a2',
'BEAM0011/rx_processing/rg_eg_amplitude_error_a3',
'BEAM0011/rx_processing/rg_eg_amplitude_error_a4',
'BEAM0011/rx_processing/rg_eg_amplitude_error_a5',
'BEAM0011/rx_processing/rg_eg_amplitude_error_a6',
'BEAM0011/rx_processing/rg_eg_center_a1',
'BEAM0011/rx_processing/rg_eg_center_a2',
'BEAM0011/rx_processing/rg_eg_center_a3',
'BEAM0011/rx_processing/rg_eg_center_a4',
'BEAM0011/rx_processing/rg_eg_center_a5',
'BEAM0011/rx_processing/rg_eg_center_a6',
'BEAM0011/rx_processing/rg_eg_center_error_a1',
'BEAM0011/rx_processing/rg_eg_center_error_a2',
'BEAM0011/rx_processing/rg_eg_center_error_a3',
'BEAM0011/rx_processing/rg_eg_center_error_a4',
'BEAM0011/rx_processing/rg_eg_center_error_a5',
'BEAM0011/rx_processing/rg_eg_center_error_a6',
'BEAM0011/rx_processing/rg_eg_chisq_a1',
'BEAM0011/rx_processing/rg_eg_chisq_a2',
'BEAM0011/rx_processing/rg_eg_chisq_a3',
'BEAM0011/rx_processing/rg_eg_chisq_a4',
'BEAM0011/rx_processing/rg_eg_chisq_a5',
'BEAM0011/rx_processing/rg_eg_chisq_a6',
'BEAM0011/rx_processing/rg_eg_flag_a1',
'BEAM0011/rx_processing/rg_eg_flag_a2',
'BEAM0011/rx_processing/rg_eg_flag_a3',
'BEAM0011/rx_processing/rg_eg_flag_a4',
'BEAM0011/rx_processing/rg_eg_flag_a5',
'BEAM0011/rx_processing/rg_eg_flag_a6',
'BEAM0011/rx_processing/rg_eg_gamma_a1',
'BEAM0011/rx_processing/rg_eg_gamma_a2',
'BEAM0011/rx_processing/rg_eg_gamma_a3',
'BEAM0011/rx_processing/rg_eg_gamma_a4',
'BEAM0011/rx_processing/rg_eg_gamma_a5',
'BEAM0011/rx_processing/rg_eg_gamma_a6',
'BEAM0011/rx_processing/rg_eg_gamma_error_a1',
'BEAM0011/rx_processing/rg_eg_gamma_error_a2',
'BEAM0011/rx_processing/rg_eg_gamma_error_a3',
'BEAM0011/rx_processing/rg_eg_gamma_error_a4',
'BEAM0011/rx_processing/rg_eg_gamma_error_a5',
'BEAM0011/rx_processing/rg_eg_gamma_error_a6',
'BEAM0011/rx_processing/rg_eg_niter_a1',
'BEAM0011/rx_processing/rg_eg_niter_a2',
'BEAM0011/rx_processing/rg_eg_niter_a3',
'BEAM0011/rx_processing/rg_eg_niter_a4',
'BEAM0011/rx_processing/rg_eg_niter_a5',
'BEAM0011/rx_processing/rg_eg_niter_a6',
'BEAM0011/rx_processing/rg_eg_sigma_a1',
'BEAM0011/rx_processing/rg_eg_sigma_a2',
'BEAM0011/rx_processing/rg_eg_sigma_a3',
'BEAM0011/rx_processing/rg_eg_sigma_a4',
'BEAM0011/rx_processing/rg_eg_sigma_a5',
'BEAM0011/rx_processing/rg_eg_sigma_a6',
'BEAM0011/rx_processing/rg_eg_sigma_error_a1',
'BEAM0011/rx_processing/rg_eg_sigma_error_a2',
'BEAM0011/rx_processing/rg_eg_sigma_error_a3',
'BEAM0011/rx_processing/rg_eg_sigma_error_a4',
'BEAM0011/rx_processing/rg_eg_sigma_error_a5',
'BEAM0011/rx_processing/rg_eg_sigma_error_a6',
'BEAM0011/rx_processing/rg_error_a1',
'BEAM0011/rx_processing/rg_error_a2',
'BEAM0011/rx_processing/rg_error_a3',
'BEAM0011/rx_processing/rg_error_a4',
'BEAM0011/rx_processing/rg_error_a5',
'BEAM0011/rx_processing/rg_error_a6',
'BEAM0011/rx_processing/rv_a1',
'BEAM0011/rx_processing/rv_a2',
'BEAM0011/rx_processing/rv_a3',
'BEAM0011/rx_processing/rv_a4',
'BEAM0011/rx_processing/rv_a5',
'BEAM0011/rx_processing/rv_a6',
'BEAM0011/rx_processing/rx_energy_a1',
'BEAM0011/rx_processing/rx_energy_a2',
'BEAM0011/rx_processing/rx_energy_a3',
'BEAM0011/rx_processing/rx_energy_a4',
'BEAM0011/rx_processing/rx_energy_a5',
'BEAM0011/rx_processing/rx_energy_a6',
'BEAM0011/rx_processing/shot_number',
'BEAM0011/rx_range_highestreturn',
'BEAM0011/rx_sample_count',
'BEAM0011/rx_sample_start_index',
'BEAM0011/selected_l2a_algorithm',
'BEAM0011/selected_mode',
'BEAM0011/selected_mode_flag',
'BEAM0011/selected_rg_algorithm',
'BEAM0011/sensitivity',
'BEAM0011/shot_number',
'BEAM0011/stale_return_flag',
'BEAM0011/surface_flag',
'BEAM0101/algorithmrun_flag',
'BEAM0101/ancillary/dz',
'BEAM0101/ancillary/l2a_alg_count',
'BEAM0101/ancillary/maxheight_cuttoff',
'BEAM0101/ancillary/rg_eg_constraint_center_buffer',
'BEAM0101/ancillary/rg_eg_mpfit_max_func_evals',
'BEAM0101/ancillary/rg_eg_mpfit_maxiters',
'BEAM0101/ancillary/rg_eg_mpfit_tolerance',
'BEAM0101/ancillary/signal_search_buff',
'BEAM0101/ancillary/tx_noise_stddev_multiplier',
'BEAM0101/beam',
'BEAM0101/channel',
'BEAM0101/cover',
'BEAM0101/cover_z',
'BEAM0101/fhd_normal',
'BEAM0101/geolocation/degrade_flag',
'BEAM0101/geolocation/delta_time',
'BEAM0101/geolocation/digital_elevation_model',
'BEAM0101/geolocation/elev_highestreturn',
'BEAM0101/geolocation/elev_lowestmode',
'BEAM0101/geolocation/elevation_bin0',
'BEAM0101/geolocation/elevation_bin0_error',
'BEAM0101/geolocation/elevation_lastbin',
'BEAM0101/geolocation/elevation_lastbin_error',
'BEAM0101/geolocation/height_bin0',
'BEAM0101/geolocation/height_lastbin',
'BEAM0101/geolocation/lat_highestreturn',
'BEAM0101/geolocation/lat_lowestmode',
'BEAM0101/geolocation/latitude_bin0',
'BEAM0101/geolocation/latitude_bin0_error',
'BEAM0101/geolocation/latitude_lastbin',
'BEAM0101/geolocation/latitude_lastbin_error',
'BEAM0101/geolocation/local_beam_azimuth',
'BEAM0101/geolocation/local_beam_elevation',
'BEAM0101/geolocation/lon_highestreturn',
'BEAM0101/geolocation/lon_lowestmode',
'BEAM0101/geolocation/longitude_bin0',
'BEAM0101/geolocation/longitude_bin0_error',
'BEAM0101/geolocation/longitude_lastbin',
'BEAM0101/geolocation/longitude_lastbin_error',
'BEAM0101/geolocation/shot_number',
'BEAM0101/geolocation/solar_azimuth',
'BEAM0101/geolocation/solar_elevation',
'BEAM0101/l2a_quality_flag',
'BEAM0101/l2b_quality_flag',
'BEAM0101/land_cover_data/landsat_treecover',
'BEAM0101/land_cover_data/landsat_water_persistence',
'BEAM0101/land_cover_data/leaf_off_doy',
'BEAM0101/land_cover_data/leaf_off_flag',
'BEAM0101/land_cover_data/leaf_on_cycle',
'BEAM0101/land_cover_data/leaf_on_doy',
'BEAM0101/land_cover_data/modis_nonvegetated',
'BEAM0101/land_cover_data/modis_nonvegetated_sd',
'BEAM0101/land_cover_data/modis_treecover',
'BEAM0101/land_cover_data/modis_treecover_sd',
'BEAM0101/land_cover_data/pft_class',
'BEAM0101/land_cover_data/region_class',
'BEAM0101/land_cover_data/urban_focal_window_size',
'BEAM0101/land_cover_data/urban_proportion',
'BEAM0101/master_frac',
'BEAM0101/master_int',
'BEAM0101/num_detectedmodes',
'BEAM0101/omega',
'BEAM0101/pai',
'BEAM0101/pai_z',
'BEAM0101/pavd_z',
'BEAM0101/pgap_theta',
'BEAM0101/pgap_theta_error',
'BEAM0101/pgap_theta_z',
'BEAM0101/rg',
'BEAM0101/rh100',
'BEAM0101/rhog',
'BEAM0101/rhog_error',
'BEAM0101/rhov',
'BEAM0101/rhov_error',
'BEAM0101/rossg',
'BEAM0101/rv',
'BEAM0101/rx_processing/algorithmrun_flag_a1',
'BEAM0101/rx_processing/algorithmrun_flag_a2',
'BEAM0101/rx_processing/algorithmrun_flag_a3',
'BEAM0101/rx_processing/algorithmrun_flag_a4',
'BEAM0101/rx_processing/algorithmrun_flag_a5',
'BEAM0101/rx_processing/algorithmrun_flag_a6',
'BEAM0101/rx_processing/pgap_theta_a1',
'BEAM0101/rx_processing/pgap_theta_a2',
'BEAM0101/rx_processing/pgap_theta_a3',
'BEAM0101/rx_processing/pgap_theta_a4',
'BEAM0101/rx_processing/pgap_theta_a5',
'BEAM0101/rx_processing/pgap_theta_a6',
'BEAM0101/rx_processing/pgap_theta_error_a1',
'BEAM0101/rx_processing/pgap_theta_error_a2',
'BEAM0101/rx_processing/pgap_theta_error_a3',
'BEAM0101/rx_processing/pgap_theta_error_a4',
'BEAM0101/rx_processing/pgap_theta_error_a5',
'BEAM0101/rx_processing/pgap_theta_error_a6',
'BEAM0101/rx_processing/rg_a1',
'BEAM0101/rx_processing/rg_a2',
'BEAM0101/rx_processing/rg_a3',
'BEAM0101/rx_processing/rg_a4',
'BEAM0101/rx_processing/rg_a5',
'BEAM0101/rx_processing/rg_a6',
'BEAM0101/rx_processing/rg_eg_amplitude_a1',
'BEAM0101/rx_processing/rg_eg_amplitude_a2',
'BEAM0101/rx_processing/rg_eg_amplitude_a3',
'BEAM0101/rx_processing/rg_eg_amplitude_a4',
'BEAM0101/rx_processing/rg_eg_amplitude_a5',
'BEAM0101/rx_processing/rg_eg_amplitude_a6',
'BEAM0101/rx_processing/rg_eg_amplitude_error_a1',
'BEAM0101/rx_processing/rg_eg_amplitude_error_a2',
'BEAM0101/rx_processing/rg_eg_amplitude_error_a3',
'BEAM0101/rx_processing/rg_eg_amplitude_error_a4',
'BEAM0101/rx_processing/rg_eg_amplitude_error_a5',
'BEAM0101/rx_processing/rg_eg_amplitude_error_a6',
'BEAM0101/rx_processing/rg_eg_center_a1',
'BEAM0101/rx_processing/rg_eg_center_a2',
'BEAM0101/rx_processing/rg_eg_center_a3',
'BEAM0101/rx_processing/rg_eg_center_a4',
'BEAM0101/rx_processing/rg_eg_center_a5',
'BEAM0101/rx_processing/rg_eg_center_a6',
'BEAM0101/rx_processing/rg_eg_center_error_a1',
'BEAM0101/rx_processing/rg_eg_center_error_a2',
'BEAM0101/rx_processing/rg_eg_center_error_a3',
'BEAM0101/rx_processing/rg_eg_center_error_a4',
'BEAM0101/rx_processing/rg_eg_center_error_a5',
'BEAM0101/rx_processing/rg_eg_center_error_a6',
'BEAM0101/rx_processing/rg_eg_chisq_a1',
'BEAM0101/rx_processing/rg_eg_chisq_a2',
'BEAM0101/rx_processing/rg_eg_chisq_a3',
'BEAM0101/rx_processing/rg_eg_chisq_a4',
'BEAM0101/rx_processing/rg_eg_chisq_a5',
'BEAM0101/rx_processing/rg_eg_chisq_a6',
'BEAM0101/rx_processing/rg_eg_flag_a1',
'BEAM0101/rx_processing/rg_eg_flag_a2',
'BEAM0101/rx_processing/rg_eg_flag_a3',
'BEAM0101/rx_processing/rg_eg_flag_a4',
'BEAM0101/rx_processing/rg_eg_flag_a5',
'BEAM0101/rx_processing/rg_eg_flag_a6',
'BEAM0101/rx_processing/rg_eg_gamma_a1',
'BEAM0101/rx_processing/rg_eg_gamma_a2',
'BEAM0101/rx_processing/rg_eg_gamma_a3',
'BEAM0101/rx_processing/rg_eg_gamma_a4',
'BEAM0101/rx_processing/rg_eg_gamma_a5',
'BEAM0101/rx_processing/rg_eg_gamma_a6',
'BEAM0101/rx_processing/rg_eg_gamma_error_a1',
'BEAM0101/rx_processing/rg_eg_gamma_error_a2',
'BEAM0101/rx_processing/rg_eg_gamma_error_a3',
'BEAM0101/rx_processing/rg_eg_gamma_error_a4',
'BEAM0101/rx_processing/rg_eg_gamma_error_a5',
'BEAM0101/rx_processing/rg_eg_gamma_error_a6',
'BEAM0101/rx_processing/rg_eg_niter_a1',
'BEAM0101/rx_processing/rg_eg_niter_a2',
'BEAM0101/rx_processing/rg_eg_niter_a3',
'BEAM0101/rx_processing/rg_eg_niter_a4',
'BEAM0101/rx_processing/rg_eg_niter_a5',
'BEAM0101/rx_processing/rg_eg_niter_a6',
'BEAM0101/rx_processing/rg_eg_sigma_a1',
'BEAM0101/rx_processing/rg_eg_sigma_a2',
'BEAM0101/rx_processing/rg_eg_sigma_a3',
'BEAM0101/rx_processing/rg_eg_sigma_a4',
'BEAM0101/rx_processing/rg_eg_sigma_a5',
'BEAM0101/rx_processing/rg_eg_sigma_a6',
'BEAM0101/rx_processing/rg_eg_sigma_error_a1',
'BEAM0101/rx_processing/rg_eg_sigma_error_a2',
'BEAM0101/rx_processing/rg_eg_sigma_error_a3',
'BEAM0101/rx_processing/rg_eg_sigma_error_a4',
'BEAM0101/rx_processing/rg_eg_sigma_error_a5',
'BEAM0101/rx_processing/rg_eg_sigma_error_a6',
'BEAM0101/rx_processing/rg_error_a1',
'BEAM0101/rx_processing/rg_error_a2',
'BEAM0101/rx_processing/rg_error_a3',
'BEAM0101/rx_processing/rg_error_a4',
'BEAM0101/rx_processing/rg_error_a5',
'BEAM0101/rx_processing/rg_error_a6',
'BEAM0101/rx_processing/rv_a1',
'BEAM0101/rx_processing/rv_a2',
'BEAM0101/rx_processing/rv_a3',
'BEAM0101/rx_processing/rv_a4',
'BEAM0101/rx_processing/rv_a5',
'BEAM0101/rx_processing/rv_a6',
'BEAM0101/rx_processing/rx_energy_a1',
'BEAM0101/rx_processing/rx_energy_a2',
'BEAM0101/rx_processing/rx_energy_a3',
'BEAM0101/rx_processing/rx_energy_a4',
'BEAM0101/rx_processing/rx_energy_a5',
'BEAM0101/rx_processing/rx_energy_a6',
'BEAM0101/rx_processing/shot_number',
'BEAM0101/rx_range_highestreturn',
'BEAM0101/rx_sample_count',
'BEAM0101/rx_sample_start_index',
'BEAM0101/selected_l2a_algorithm',
'BEAM0101/selected_mode',
'BEAM0101/selected_mode_flag',
'BEAM0101/selected_rg_algorithm',
'BEAM0101/sensitivity',
'BEAM0101/shot_number',
'BEAM0101/stale_return_flag',
'BEAM0101/surface_flag',
'BEAM0110/algorithmrun_flag',
'BEAM0110/ancillary/dz',
'BEAM0110/ancillary/l2a_alg_count',
'BEAM0110/ancillary/maxheight_cuttoff',
'BEAM0110/ancillary/rg_eg_constraint_center_buffer',
'BEAM0110/ancillary/rg_eg_mpfit_max_func_evals',
'BEAM0110/ancillary/rg_eg_mpfit_maxiters',
'BEAM0110/ancillary/rg_eg_mpfit_tolerance',
'BEAM0110/ancillary/signal_search_buff',
'BEAM0110/ancillary/tx_noise_stddev_multiplier',
'BEAM0110/beam',
'BEAM0110/channel',
'BEAM0110/cover',
'BEAM0110/cover_z',
'BEAM0110/fhd_normal',
...]
len(SDS)1576
4. Subset by Layer and Filter by Quality
below are the list of datasets will be read and then used to generate a pandas dataframe.
| Label | Description | Units |
|---|---|---|
| lat_lowestmode | Latitude of center of lowest mode | degree |
| lon_lowestmode | Longitude of center of lowest mode | degree |
| elev_lowestmode | elevation of center of lowest mode relative to reference ellipsoid | m |
| shot_number | Unique shot ID | counter |
| l2b_quality_flag | Flag simpilfying selection of most useful data for Level 2B** | - |
| degrade_flag | Non-zero values indicate the shot occured during a degraded period. A non-zero tens digit indicates degraded attitude, a non-zero ones digit indicates a degraded trajectory. 3X=ADF CHU solution unavailable (ST-2); 4X=Platform attitude; 5X=Poor solution (filter covariance large); 6X=Data outage (platform attitude gap also); 7X=ST 1+2 unavailable (similar boresight FOV); 8X=ST 1+2+3 unavailable; 9X=ST 1+2+3 and ISS unavailable; X1=Maneuver; X2=GPS data gap; X3=ST blinding; X4=Other; X5=GPS receiver clock drift; X6=X5+X1; X7=X5+X2; X8=X5+X3; X9=X5+X4 | - |
| pai | Total plant area index | m2/m2 |
| rh100 | Height above ground of the received waveform signal start (rh[101] from L2A) | cm |
| digital_elevation_model | Digital elevation model height above the WGS84 ellipsoid. Interpolated at latitude_bin0 and longitude_bin0 from the TandemX 90m product | m |
| modis_nonvegetated | Percent non-vegetated from MODIS data. Interpolated at latitude_bin0 and longitude_bin0 | percent |
** quality_flag is a summation of several individual quality assessment parameters and other flags and is intended to provide general guidance only. A quality_flag value of 1 indicates the cover and vertical profile metrics represent the land surface and meet criteria based on waveform shot energy, sensitivity, amplitude, and real-time surface tracking quality, and the quality of extended Gaussian fitting to the lowest mode.
columns= ['Beam', 'Shot Number', 'Longitude', 'Latitude', 'Quality Flag', 'Tandem-X DEM',
'Canopy Elevation (m)','Elevation (m)', 'Plant Area Index', 'Canopy Height/rh100 (cm)',
'non-vegetated from MODIS (percent)', 'Degrade Flag']
latslons_all = pandas.DataFrame(columns=columns)
beamNames = ['BEAM0000', 'BEAM0001', 'BEAM0010', 'BEAM0011', 'BEAM0101', 'BEAM0110', 'BEAM1000', 'BEAM1011' ]
for beamname in beamNames:
# Open the SDS
lats = L2B[f'{beamname}/geolocation/lat_lowestmode'][()]
lons = L2B[f'{beamname}/geolocation/lon_lowestmode'][()]
elevs = L2B[f'{beamname}/geolocation/elev_lowestmode'][()]
shots = L2B[f'{beamname}/geolocation/shot_number'][()].astype(str)
quality = L2B[f'{beamname}/l2b_quality_flag'][()]
pai = L2B[f'{beamname}/pai'][()]
rh100 = L2B[f'{beamname}/rh100'][()]
degrade_flag = L2B[f'{beamname}/geolocation/degrade_flag'][()]
dem = L2B[f'{beamname}/geolocation/digital_elevation_model'][()]
canopy = L2B[f'{beamname}/geolocation/elev_highestreturn'][()]
modis_veg = L2B[f'{beamname}/land_cover_data/modis_nonvegetated'][()]
latslons = pandas.DataFrame({'Beam':beamname, 'Shot Number':shots, 'Longitude':lons, 'Latitude':lats, 'Quality Flag':quality,
'Tandem-X DEM':dem, 'Canopy Elevation (m)':canopy, 'Elevation (m)':elevs, 'Plant Area Index':pai,
'Canopy Height/rh100 (cm)':rh100, 'non-vegetated from MODIS (percent)':modis_veg, 'Degrade Flag':degrade_flag})
latslons_all = pandas.concat([latslons_all, latslons],join="inner")
latslons_all| Beam | Shot Number | Longitude | Latitude | Quality Flag | Tandem-X DEM | Canopy Elevation (m) | Elevation (m) | Plant Area Index | Canopy Height/rh100 (cm) | non-vegetated from MODIS (percent) | Degrade Flag | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | BEAM0000 | 191450000200044950 | -134.826959 | 20.454284 | 0 | -999999.000000 | 8690.881836 | 8690.881836 | -9999.000000 | 0 | -9999.0 | 0 |
| 1 | BEAM0000 | 191450000200044951 | -134.826788 | 20.454486 | 0 | -999999.000000 | 8690.892578 | 8690.892578 | -9999.000000 | 0 | -9999.0 | 0 |
| 2 | BEAM0000 | 191450000200044952 | -134.826616 | 20.454687 | 0 | -999999.000000 | 8690.902344 | 8690.902344 | -9999.000000 | 0 | -9999.0 | 0 |
| 3 | BEAM0000 | 191450000200044953 | -134.826445 | 20.454889 | 0 | -999999.000000 | 8690.913086 | 8690.913086 | -9999.000000 | 0 | -9999.0 | 0 |
| 4 | BEAM0000 | 191450000200044954 | -134.826274 | 20.455091 | 0 | -999999.000000 | 8691.520508 | 8691.520508 | -9999.000000 | 0 | -9999.0 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 116686 | BEAM1011 | 191451100200157799 | -66.732469 | 51.778879 | 0 | 575.726562 | 2517.487549 | 2480.030518 | -9999.000000 | 3745 | 11.0 | 0 |
| 116687 | BEAM1011 | 191451100200157800 | -66.731667 | 51.778883 | 0 | 577.237915 | 2457.362305 | 2456.914062 | -9999.000000 | 43 | 11.0 | 0 |
| 116688 | BEAM1011 | 191451100200157801 | -66.730790 | 51.778890 | 0 | 577.237915 | 2527.554688 | 2499.284668 | -9999.000000 | 2827 | 11.0 | 0 |
| 116689 | BEAM1011 | 191451100200157802 | -66.729918 | 51.778898 | 0 | 580.382568 | 2560.982666 | 2536.708496 | 4.039585 | 2427 | 11.0 | 0 |
| 116690 | BEAM1011 | 191451100200157803 | -66.729060 | 51.778904 | 0 | 581.518860 | 2568.459717 | 2561.886963 | -9999.000000 | 657 | 25.0 | 0 |
948552 rows × 12 columns
Below, is the plot of entire sub-orbit included in this granule. Plotting this could take a long time, and might include information that we do not need necessarily. So lets make a subset of data to only keep the data we need.

below, the shots that occured during a degraded period and low quality are removed from the dataframe.
latslons_all = latslons_all [latslons_all ['Degrade Flag'] == 0].drop(columns = 'Degrade Flag')
latslons_all = latslons_all [latslons_all['Quality Flag'] == 1].drop(columns = 'Quality Flag')
# reset the index and drop the NAs
latslons_all = latslons_all[latslons_all['Tandem-X DEM'] != -999999.0]
latslons_all = latslons_all[latslons_all['non-vegetated from MODIS (percent)'] != -9999.0]
latslons_all = latslons_all.dropna()
latslons_all = latslons_all.reset_index(drop=True)
latslons_all| Beam | Shot Number | Longitude | Latitude | Tandem-X DEM | Canopy Elevation (m) | Elevation (m) | Plant Area Index | Canopy Height/rh100 (cm) | non-vegetated from MODIS (percent) | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | BEAM0000 | 191450000200081940 | -120.463823 | 34.488103 | 199.594803 | 196.925323 | 183.583496 | 1.352260 | 1334 | 15.0 |
| 1 | BEAM0000 | 191450000200081941 | -120.463359 | 34.488465 | 199.621231 | 210.334656 | 203.645050 | 0.295318 | 667 | 15.0 |
| 2 | BEAM0000 | 191450000200081949 | -120.459737 | 34.491300 | 213.059143 | 228.421555 | 209.324432 | 1.824727 | 1909 | 9.0 |
| 3 | BEAM0000 | 191450000200081950 | -120.459272 | 34.491663 | 235.767044 | 244.728012 | 230.078156 | 1.431416 | 1464 | 9.0 |
| 4 | BEAM0000 | 191450000200081951 | -120.458817 | 34.492019 | 235.767044 | 243.235764 | 234.864410 | 0.475982 | 836 | 6.0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 274530 | BEAM1011 | 191451100200155427 | -68.703371 | 51.748007 | 509.907318 | 513.940735 | 506.507111 | 1.281197 | 742 | 32.0 |
| 274531 | BEAM1011 | 191451100200155428 | -68.702538 | 51.748026 | 515.884949 | 522.243958 | 512.270203 | 0.228271 | 997 | 37.0 |
| 274532 | BEAM1011 | 191451100200155429 | -68.701715 | 51.748045 | 514.225098 | 523.028931 | 510.178894 | 0.794760 | 1285 | 37.0 |
| 274533 | BEAM1011 | 191451100200155430 | -68.700894 | 51.748064 | 514.225098 | 519.418213 | 506.007843 | 0.680019 | 1340 | 37.0 |
| 274534 | BEAM1011 | 191451100200155431 | -68.700070 | 51.748083 | 509.531982 | 516.337219 | 504.495789 | 0.486418 | 1184 | 37.0 |
274535 rows × 10 columns
5. Create a Geodataframe and Subset Spatially
Below, an additional column is created and called ‘geometry’ that contains a shapely point generated from each lat/lon location from the shot is created. Next, the dataframe is converted to a Geopandas GeoDataFrame.
# Take the lat/lon dataframe and convert each lat/lon to a shapely point and convert to a Geodataframe
latslons_all = geopandas.GeoDataFrame(latslons_all, geometry=latslons_all.apply(lambda row: Point(row.Longitude, row.Latitude), axis=1))
latslons_all = latslons_all.set_crs('EPSG:4326')Import a GeoJSON of a small eastern section of Uinta-Wasatch-Cache National Forest as an additional GeoDataFrame.
ROI = geopandas.GeoDataFrame.from_file('NationalForest.geojson')
ROI.crs = 'EPSG:4326'Next, filter the shots that are within the ROI boundaries.
shot_list = []
for num, geom in enumerate(latslons_all['geometry']):
if ROI.contains(geom)[0]:
shot_n = latslons_all.loc[num, 'Shot Number']
shot_list.append(shot_n)DF = latslons_all.where(latslons_all['Shot Number'].isin(shot_list))
DF = DF.reset_index(drop=True).dropna()DF| Beam | Shot Number | Longitude | Latitude | Tandem-X DEM | Canopy Elevation (m) | Elevation (m) | Plant Area Index | Canopy Height/rh100 (cm) | non-vegetated from MODIS (percent) | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 8944 | BEAM0000 | 191450000200100445 | -111.263042 | 40.692563 | 2007.632080 | 2015.287842 | 2009.384521 | 0.276865 | 590 | 20.0 | POINT (-111.26304 40.69256) |
| 8945 | BEAM0000 | 191450000200100446 | -111.262499 | 40.692874 | 2012.697021 | 2019.093872 | 2013.003784 | 0.120738 | 609 | 20.0 | POINT (-111.26250 40.69287) |
| 8946 | BEAM0000 | 191450000200100447 | -111.261956 | 40.693185 | 2018.024170 | 2022.015381 | 2016.934082 | 0.090340 | 507 | 19.0 | POINT (-111.26196 40.69319) |
| 8947 | BEAM0000 | 191450000200100449 | -111.260871 | 40.693807 | 2022.398193 | 2029.190552 | 2022.913696 | 0.316465 | 626 | 19.0 | POINT (-111.26087 40.69381) |
| 8948 | BEAM0000 | 191450000200100450 | -111.260329 | 40.694117 | 2028.278809 | 2031.693481 | 2026.051758 | 0.269103 | 563 | 19.0 | POINT (-111.26033 40.69412) |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 251324 | BEAM1011 | 191451100200096272 | -110.799421 | 40.906476 | 2648.858887 | 2661.588135 | 2641.007568 | 0.558181 | 2057 | 13.0 | POINT (-110.79942 40.90648) |
| 251325 | BEAM1011 | 191451100200096273 | -110.798881 | 40.906781 | 2648.858887 | 2656.045166 | 2635.277832 | 0.276846 | 2076 | 12.0 | POINT (-110.79888 40.90678) |
| 251326 | BEAM1011 | 191451100200096274 | -110.798337 | 40.907088 | 2636.217285 | 2651.862549 | 2633.971191 | 0.162534 | 1788 | 12.0 | POINT (-110.79834 40.90709) |
| 251327 | BEAM1011 | 191451100200096275 | -110.797793 | 40.907395 | 2636.313477 | 2652.544678 | 2633.196777 | 0.630030 | 1934 | 12.0 | POINT (-110.79779 40.90740) |
| 251328 | BEAM1011 | 191451100200096276 | -110.797250 | 40.907702 | 2636.313477 | 2643.638672 | 2631.611572 | 0.157591 | 1202 | 7.0 | POINT (-110.79725 40.90770) |
5890 rows × 11 columns
All_DF = geopandas.GeoDataFrame(DF).drop(columns=['Longitude', 'Latitude'])6. Visualize a GeoDataFrame
In this section, the GeoDataFrame and the geoviews python package are used to spatially visualize the location of the GEDI shots on a basemap layer and import a GeoJSON file of the spatial region of interest for this use case example.
Defining the vdims below will allow you to hover over specific shots and view information about them.
# Create a list of geodataframe columns to be included as attributes in the output map
vdims = []
for f in All_DF:
if f not in ['geometry']:
vdims.append(f)
vdims# Define a function for visualizing GEDI points
def pointVisual(features, vdims):
return (gvts.EsriImagery * geoviews.Points(features, vdims=vdims).options(tools=['hover'], height=500, width=900, size=4,
color='yellow', fontsize={'xticks': 10, 'yticks': 10,
'xlabel':16, 'ylabel': 16}))
# Visualize GEDI data
geoviews.Polygons(ROI['geometry']).opts(line_color='red', color=None)* pointVisual(All_DF, vdims = vdims)7. Export Subsets as GeoJSON Files
Finally, export the GeoDataFrame as a .geojson file that can be easily opened in your favorite remote sensing and/or GIS software and will include an attribute table with all of the shots/values for each of the SDS layers in the dataframe.
outName = L2B.filename.replace('.h5', '.geojson') # Create an output file name using the input file name
print(outName)
All_DF.to_file(outName, driver='GeoJSON') # Export to GeoJSONGEDI02_B_2022120091720_O19145_02_T09106_02_003_01_V002.geojson